package com.xbongbong.pro.enums.vip.enums;

import com.xbongbong.pro.enums.PackageTypeEnum;
import com.xbongbong.pro.enums.menu.enums.JXCMenuEnum;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;

/**
 * 维护高级版及旗舰版才能使用的saas系统菜单
 * 1、该枚举维护系统菜单哪些高级版可用，哪些旗舰版可用，使用时基于系统的默认规则（低版本的功能高版本肯定可用）
 * 2、在现有ProMenuHelp#getMenuList方法内加入过滤逻辑，根据当前公司的套餐版本，过滤不能查看的VIP菜单
 * 3、因为要区分新老用户所以和VipSaasMenuEnum不通用
 * @author rsc
 * @version v1.0
 * @since v1.0
 */
@Getter
public enum VipJxcSaasMenuEnum {
    /**
     * 进销存相关
     */
    //只有高级版及以上客户可用： // 以销定购
    OTHER_FUND_MANAGEMENT(PackageTypeEnum.ADVANCED.getType(), JXCMenuEnum.WAIT_PURCHASE.getCode(), JXCMenuEnum.WAIT_PURCHASE.getAlias()),
    //只有高级版及以上客户可用：// 智能补货
    OTHER_INCOME(PackageTypeEnum.ADVANCED.getType(), JXCMenuEnum.SMART_REPLENISHMENT.getCode(), JXCMenuEnum.SMART_REPLENISHMENT.getAlias()),
    //只有高级版及以上客户可用：// 待入库
    OTHER_EXPENSE(PackageTypeEnum.ADVANCED.getType(), JXCMenuEnum.WAIT_INSTOCK.getCode(), JXCMenuEnum.WAIT_INSTOCK.getAlias()),
    //只有高级版及以上客户可用：// 待出库
    FUND_TRANSFER(PackageTypeEnum.ADVANCED.getType(), JXCMenuEnum.WAIT_OUTSTOCK.getCode(), JXCMenuEnum.WAIT_OUTSTOCK.getAlias()),
    ;

    /**
     * 至少需要哪种套餐及以上才可以使用
     * 如其他收入单只能高级版及以上客户可用，则该值为 PackageTypeEnum.ADVANCED.Type
     * @see com.xbongbong.pro.enums.PackageTypeEnum
     */
    private Integer minFeeType;
    /**
     * 对应各个菜单，如CRMMenuEnum、JXCMenuEnum等
     * @see XbbRefTypeEnum
     */
    private Integer code;
    /**
     * saas应用标示
     * 对应各个菜单，如CRMMenuEnum、JXCMenuEnum等
     */
    private String alias;

    VipJxcSaasMenuEnum(Integer minFeeType, int code, String alias) {
        this.minFeeType = minFeeType;
        this.code = code;
        this.alias = alias;
    }

    /**
     * 获取当前公司套餐不能看到的菜单alias集合
     * @param feeType 套餐类型
     * @return java.util.List<java.lang.String>
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    public static List<String> getUnSeeMenuList(Integer feeType) {
        //当前公司套餐所能使用的套餐功能，比如旗舰版肯定能使用高级版相关功能
        List<Integer> usefulFeeTypeList = PackageTypeEnum.getLowFeeTypeList(feeType);
        //当前公司套餐不能看到的菜单
        List<String> unSeeMenuList = new ArrayList<>();
        for (VipJxcSaasMenuEnum cache : values()) {
            //不包含则不能使用该菜单
            if (!usefulFeeTypeList.contains(cache.minFeeType)) {
                unSeeMenuList.add(cache.alias);
            }
        }
        return unSeeMenuList;
    }

    /**
     * 获取老公司标准版公司套餐不能看到的菜单alias集合
     * @param feeType 套餐类型
     * @return java.util.List<java.lang.String>
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    public static List<String> getOldCompanyUnSeeMenuList() {
        //当前公司套餐不能看到的菜单
        List<String> unSeeMenuList = new ArrayList<>();
        unSeeMenuList.add(OTHER_INCOME.getAlias());
        return unSeeMenuList;
    }
}
